#include <QVariant>
#include "XTreeItem.h"


void XTreeItem::appendChild(XTreeItemPtr child)
{
	m_listChildItems.push_back(child);
	child->m_pParentItem = this;
}

XTreeItemPtr XTreeItem::child(int row)
{
	if (row < 0 || row >= m_listChildItems.size())
		return nullptr;
	return m_listChildItems.at(row);
}

int XTreeItem::childCount() const
{
	return m_listChildItems.length();
}

int XTreeItem::columnCount() const
{
	return m_listData.length();
}

QVariant XTreeItem::data(int column) const
{
	if (column < 0 || column >= m_listData.size())
		return QVariant();
	return m_listData.at(column);
}

void XTreeItem::setData(const QVariant & data)
{
	m_listData.clear();
	m_listData.append(data);
}

int XTreeItem::row() const
{
	if (m_pParentItem)
	{
		return m_pParentItem->m_listChildItems.indexOf(const_cast<XTreeItemPtr>(this));
	}
	return 0;
}

XTreeItemPtr XTreeItem::parentItem()
{
	return m_pParentItem;
}

XTreeItem::~XTreeItem()
{
	qDeleteAll(m_listChildItems);
	m_listChildItems.clear();
}

XTreeItem::XTreeItem(XTreeItemPtr parentItem) :m_pParentItem(parentItem)
{
	m_pParentItem->appendChild(this);
}